home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
cpp_libs
/
sos3-2.lha
/
bin
/
sos-cmp
< prev
next >
Wrap
Text File
|
1992-02-13
|
4KB
|
111 lines
#!/bin/sh
# --------------------------------------------------------------------------
# Copyright 1992 by Forschungszentrum Informatik (FZI)
#
# You can use and distribute this software under the terms of the licence
# you should have received along with this program.
# If not or if you want additional information, write to
# Forschungszentrum Informatik, "STONE", Haid-und-Neu-Strasse 10-14,
# D-7500 Karlsruhe 1, Germany.
# --------------------------------------------------------------------------
# 'sos-cmp - 27:02:91 - Dietmar Theobald'
#
# sos-cmp [-v] [-E] [-I] [-L <language>] <file_prefix> [<schema>]
#
# Interface to the SOS compiler and host language generators. A compilation is
# carried out in two phases: In the first phase a schema file is processed and
# an schema object as an internal representation is generated which is placed in
# the root container. The second phase operates on this schema object and
# produces a host language interface to the classes and types defined in the
# schema.
#
# The "-v" option causes a report on the start of each compilation phase.
#
# The "-E" flag takes effect on the first phase by enabling an echo mode. This
# echo is generated by the lexical analyzer module of the SOS compiler and
# consists of the text of an token before this token is handed over to the parser
# module. The echo mode is intended to be used in debugging the SOS compiler.
#
# The "-L" option specifies the host language interface to be generated. Up to
# now there exists only a C++ binding, which is also the default.
#
# <file_prefix> may be:
# "^" : The first phase is not carried out.
# "-" : Input is read from stdin.
# another string: Input is read from "<file_prefix>.sos".
#
# <schema> may be:
# "^" : The second phase is not carried out.
# another string: Output is generated for the named <schema>.
# The output is written to the current working directory.
# If <schema> is not given then <file_prefix> is also used as schema name. This
# is not possible if <file_prefix> is "^" or "-".
#
BINDIR=${SOSPATH-__SOS_INSTALLED_PATH__}/bin/
test="${SOSCONTAINER?}"
tmpfile=/tmp/sos-cmp.$$
language='CC'
while [ $# -gt 0 ]
do
case $1 in
-v) verbose='+' ;;
-E) cfeopt='-E' ;;
-I) genopt='-I' ;;
-L) shift
language="$1" ;;
*) break ;;
esac
shift
done
generator="gen$language"
if [ $# -eq 1 ] ; then
[ "$1" = '^' -o "$1" = '-' ] && {
echo >&2 '*** sos-cmp: no implicit schema name' ; exit 1
}
infile="$1".sos
schema="`basename $1`"
elif [ $# -eq 2 ] ; then
if [ "$1" = '-' -o "$1" = '^' ] ; then
infile="$1"
else
infile="$1".sos
fi
schema="$2"
else
echo >&2 '*** usage: sos-cmp [-E] [-I] [-L language] file-prefix [schema-name]'
exit 1
fi
[ "$infile" != '^' ] && { [ "$verbose" ] && \
echo 'sos-cmp: starting compilation ...'
if [ $infile = '-' ] ; then
cat - > $tmpfile
${BINDIR}cfe $cfeopt $tmpfile || { rm $tmpfile
exit 1
}
rm $tmpfile
else
${BINDIR}cfe $cfeopt $infile || exit 1
fi
}
[ "$schema" != '^' ] && {
[ "$verbose" ] && echo 'sos-cmp: starting generation ...'
genfiles="${schema}_sos.c ${schema}_sos.h ${schema}_use.h"
rm -f $genfiles
${BINDIR}$generator $genopt $schema || exit 1
}
exit 0